﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;
using Tibet.Entidades;
using Tibet.Entidades.FabricaEntidades;
using Entidades;//esto lo agregamos nosotros mas la referencia de System.Configuration que hay que hacer a nivel del proyecto
                //click derecho sobre el proyecto, add reference pestana .NET y selecciona System.configuration

namespace Tibet.Datos.DaoWebConfig
{
    public class DaoConfig
    {

        private string path;
        private Configuration config;

        private Configuration obtenerPath()
        {
            path = System.AppDomain.CurrentDomain.BaseDirectory;
            int ultimo = path.Length - 1;
            string prueba = path.Substring(0, ultimo);
            ultimo = prueba.LastIndexOf("\\");
            path = prueba.Substring(0, ultimo) + "\\Tibet\\Web.config";

            //Set del path del webconfig a objeto configuration
            Configuration config2 = ConfigurationManager.OpenExeConfiguration(path);
            return config2;
        } 
        public Entidad Singletonlleno()
        {
            Entidad _entidad = FabricaEntidades.ObtenerSingletonConfig();
            (_entidad as SingletonConfig).DominioCorreo = GetDireccionServidorCorreo();
            (_entidad as SingletonConfig).PuertoCorreo = GetPuertoServidorCorreo();
            (_entidad as SingletonConfig).NombreRepo = GetNombreSVN();
            (_entidad as SingletonConfig).PathRepo = GetDirSVN();
            (_entidad as SingletonConfig).NombreBD = GetNombreDb();
            (_entidad as SingletonConfig).UsuarioBD = GetUsuarioDb();
            (_entidad as SingletonConfig).PasswordBD = GetPassword();
            (_entidad as SingletonConfig).ServidorBD = GetIpServidor();
            (_entidad as SingletonConfig).DirectorioDll = GetDireccDll();


            return _entidad;
        }

        public bool EscribeConfig(Entidad E)
        {
            bool bandera = false;
            try
            {
                SetDireccionServidorCorreo((E as SingletonConfig).DominioCorreo);
                SetPuertoServidorCorreo((E as SingletonConfig).PuertoCorreo);
                SetNombreSVN((E as SingletonConfig).NombreRepo);
                SetDirSVN((E as SingletonConfig).PathRepo);
                SetNombreDb((E as SingletonConfig).NombreBD);
                SetUsuarioDB((E as SingletonConfig).UsuarioBD);
                SetPassword((E as SingletonConfig).PasswordBD);
                SetIpServidor((E as SingletonConfig).ServidorBD);
                SetDireccDll((E as SingletonConfig).DirectorioDll);
                bandera = true;
            }
            catch (Exception ex)
            {
                bandera = false;
            }

            return bandera;
        }

        #region GETS Config Base de datos

        public string GetIpServidor()
        {
            config = obtenerPath();
            return config.AppSettings.Settings["DireccDb"].Value;
        }

        public string GetNombreDb()
        {
            config = obtenerPath();
            return config.AppSettings.Settings["NombreDb"].Value;
        }

        public string GetPassword()
        {
            config = obtenerPath();
            return config.AppSettings.Settings["PassDB"].Value;
        }

        public string GetUsuarioDb()
        {
            config = obtenerPath();
            return config.AppSettings.Settings["UsuarioDB"].Value;
        }

        //public void SetConexionDB()
        //{
        //    obtenerPath();
        //    string ipServidor = config.AppSettings.Settings["DireccDb"].Value;
        //    string nombreDb = config.AppSettings.Settings["NombreDb"].Value;

        //    string cadenaDeConexion = "Data Source =" + ipServidor + ";" +
        //                              " Initial Catalog =" + nombreDb + ";" + 
        //                              " Integrated Security = SSPI;";

        //    config.AppSettings.Settings["stringConexion"].Value = cadenaDeConexion;
        //    config.Save(ConfigurationSaveMode.Modified);
        //}

        //public string GetConexionDB()
        //{
        //    obtenerPath();
        //    return config.AppSettings.Settings["stringConexion"].Value;  
        //}

        #endregion

        #region GETS  Config Svn

        /// <summary>
        /// Obtiene la direccion SVN del web config
        /// </summary>
        /// <returns></returns>
        public string GetDirSVN()
        {
            config = obtenerPath();
            return config.AppSettings.Settings["direccionSVN"].Value;
        }

        /// <summary>
        /// Obtiene el nombre del SVN del Web config
        /// </summary>
        /// <returns></returns>
        public string GetNombreSVN()
        {
            config = obtenerPath();
            return config.AppSettings.Settings["nombreSVN"].Value;
        }

        #endregion

        #region GETS Config Servidor de Correo

        public string GetNombreServidorCorreo()
        {
            config = obtenerPath();
            return config.AppSettings.Settings["nombreServidorCorreo"].Value;
        }

        public string GetDireccionServidorCorreo()
        {
            config = obtenerPath();
            return config.AppSettings.Settings["direccionServidorCorreo"].Value;
        }

        public string GetPuertoServidorCorreo()
        {
            config = obtenerPath();
            return config.AppSettings.Settings["puertoServidorCorreo"].Value;
        }

        #endregion

        #region GETS Direccion DLL
        public string GetDireccDll()
        {
            config = obtenerPath();
            return config.AppSettings.Settings["DireccDLL"].Value;
        }

        #endregion

        #region SETS Config Base de datos

        public void SetIpServidor(String direccDb)
        {
            config = obtenerPath();
            config.AppSettings.Settings["DireccDb"].Value = direccDb;
            config.Save(ConfigurationSaveMode.Modified);
        }

        public void SetNombreDb(String nombreDb)
        {
            config = obtenerPath();
            config.AppSettings.Settings["NombreDb"].Value = nombreDb;
            config.Save(ConfigurationSaveMode.Modified);
        }

        public void SetPassword(String passDb)
        {
            config = obtenerPath();
            config.AppSettings.Settings["PassDB"].Value = passDb;
            config.Save(ConfigurationSaveMode.Modified);
        }

        public void SetUsuarioDB(String usuarioDb)
        {
            config = obtenerPath();
            config.AppSettings.Settings["UsuarioDB"].Value = usuarioDb;
            config.Save(ConfigurationSaveMode.Modified);
        }

        //public void SetConexionDB()
        //{
        //    obtenerPath();
        //    string ipServidor = config.AppSettings.Settings["DireccDb"].Value;
        //    string nombreDb = config.AppSettings.Settings["NombreDb"].Value;

        //    string cadenaDeConexion = "Data Source =" + ipServidor + ";" +
        //                              " Initial Catalog =" + nombreDb + ";" + 
        //                              " Integrated Security = SSPI;";

        //    config.AppSettings.Settings["stringConexion"].Value = cadenaDeConexion;
        //    config.Save(ConfigurationSaveMode.Modified);
        //}

        //public string GetConexionDB()
        //{
        //    obtenerPath();
        //    return config.AppSettings.Settings["stringConexion"].Value;
        //}

        #endregion

        #region SETS Config Svn

        public void SetDirSVN(String dirSvn)
        {
            config = obtenerPath();
            config.AppSettings.Settings["direccionSVN"].Value = dirSvn;
            config.Save(ConfigurationSaveMode.Modified);
        }

        public void SetNombreSVN(String nombreSvn)
        {
            config = obtenerPath();
            config.AppSettings.Settings["nombreSVN"].Value = nombreSvn;
            config.Save(ConfigurationSaveMode.Modified);
        }

        #endregion

        #region SETS Config Servidor de Correo

        public void SetNombreServidorCorreo(String nombreServidor)
        {
            config = obtenerPath();
            config.AppSettings.Settings["nombreServidorCorreo"].Value = nombreServidor;
            config.Save(ConfigurationSaveMode.Modified);
        }

        public void SetDireccionServidorCorreo(String direccionServidor)
        {
            config = obtenerPath();
            config.AppSettings.Settings["direccionServidorCorreo"].Value = direccionServidor;
            config.Save(ConfigurationSaveMode.Modified);
        }

        public void SetPuertoServidorCorreo(String puertoServidor)
        {
            config = obtenerPath();
            config.AppSettings.Settings["puertoServidorCorreo"].Value = puertoServidor;
            config.Save(ConfigurationSaveMode.Modified);
        }

        #endregion

        #region SETS Direccion DLL

        public void SetDireccDll(String puertoServidor)
        {
            config = obtenerPath();
            config.AppSettings.Settings["DireccDLL"].Value = puertoServidor;
            config.Save(ConfigurationSaveMode.Modified);
        }

        #endregion
    }
}
